home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / dll / dllutl.c < prev    next >
C/C++ Source or Header  |  2004-01-10  |  2KB  |  97 lines

  1. /*-------------------------------------------------------------
  2.   dllutl.c : misc functions
  3.   (C) 1997-2003 Kazuto Sato
  4.   Please read readme.txt about the license.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcdll.h"
  10.  
  11. /*------------------------------------------------
  12.   the windows is subclassified yet?
  13. --------------------------------------------------*/
  14. BOOL IsSubclassed(HWND hwnd)
  15. {
  16.     LONG wndproc1, wndproc2;
  17.     
  18.     if(g_winver&WINNT)
  19.     {
  20.         wndproc1 = GetClassLongW(hwnd, GCL_WNDPROC);
  21.         wndproc2 = GetWindowLongW(hwnd, GWL_WNDPROC);
  22.     }
  23.     else
  24.     {
  25.         wndproc1 = GetClassLongA(hwnd, GCL_WNDPROC);
  26.         wndproc2 = GetWindowLongA(hwnd, GWL_WNDPROC);
  27.     }
  28.     
  29.     if(wndproc1 != wndproc2) return TRUE;
  30.     return FALSE;
  31. }
  32.  
  33. /*------------------------------------------------
  34.   create memory DC and bitmap
  35. --------------------------------------------------*/
  36. BOOL CreateOffScreenDC(HDC hdc, HDC *phdcMem, HBITMAP *phbmp,
  37.     int width, int height)
  38. {
  39.     *phdcMem = CreateCompatibleDC(hdc);
  40.     if(!*phdcMem) { *phbmp = NULL; return FALSE; }
  41.     
  42.     *phbmp = CreateCompatibleBitmap(hdc, width, height);
  43.     if(!*phbmp)
  44.     {
  45.         DeleteDC(*phdcMem); *phdcMem = NULL;
  46.         return FALSE;
  47.     }
  48.     
  49.     SelectObject(*phdcMem, *phbmp);
  50.     return TRUE;
  51. }
  52.  
  53. /*------------------------------------------------
  54.   width and height of HBITMAP
  55. --------------------------------------------------*/
  56. BOOL GetBmpSize(HBITMAP hbmp, int* w, int* h)
  57. {
  58.     BITMAP bmp;
  59.     if(GetObject(hbmp, sizeof(BITMAP), (LPVOID)&bmp) == 0)
  60.         return FALSE;
  61.     *w = bmp.bmWidth;
  62.     *h = bmp.bmHeight;
  63.     return TRUE;
  64. }
  65.  
  66. /*------------------------------------------------
  67.   copy the parent window's surface to child
  68. --------------------------------------------------*/
  69. void CopyParentSurface(HWND hwnd, HDC hdcDest, int xdst, int ydst,
  70.     int w, int h, int xsrc, int ysrc)
  71. {
  72.     HDC hdcTemp, hdcMem;
  73.     HBITMAP hbmp;
  74.     RECT rcParent;
  75.     
  76.     GetWindowRect(GetParent(hwnd), &rcParent);
  77.     
  78.     hdcTemp = GetDC(NULL);
  79.     
  80.     if(!CreateOffScreenDC(hdcTemp, &hdcMem, &hbmp,
  81.         rcParent.right - rcParent.left, rcParent.bottom - rcParent.top))
  82.     {
  83.         ReleaseDC(NULL, hdcTemp);
  84.         return;
  85.     }
  86.     
  87.     SendMessage(GetParent(hwnd), WM_PRINTCLIENT,
  88.         (WPARAM)hdcMem, (LPARAM)PRF_CLIENT);
  89.     
  90.     BitBlt(hdcDest, xdst, ydst, w, h, hdcMem, xsrc, ysrc, SRCCOPY);
  91.     
  92.     DeleteDC(hdcMem);
  93.     DeleteObject(hbmp);
  94.     
  95.     ReleaseDC(NULL, hdcTemp);
  96. }
  97.